﻿Imports TransportadoraToledoBLL
Public Class frm_movimentacao_ordemServico
    Public objBLL As New ordemServicoBLL
    Dim objVei As New VeiculosBLLTeste
    Dim objveiculos As New VeiculosBLL
    Public controle As String
    Public ultimo, primeiro, atual As Integer
    Dim controleFinalizaOrdemServ
    Dim controlePesquisar As Boolean = False

    Sub carregaPrimeiroUltimo()
        Try
            ultimo = objBLL.localizarPrimeiroUltimo("ultimo")
            primeiro = objBLL.localizarPrimeiroUltimo("primeiro")
            atual = ultimo
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try

    End Sub


    Sub carregaUltimo()
        If (ultimo <> 0) Then
            'Algum usuario foi clicado
            objBLL.localizar(ultimo)
            If (objBLL.pOs_codigo <> 0) Then
                carregaCampos()
                If (objBLL.pOs_valor = 0) Then
                    controleFinalizaOrdemServ = 0
                Else
                    controleFinalizaOrdemServ = 1
                End If

            End If
        End If
    End Sub
    Sub carregaPrimeiro()
        If (primeiro <> 0) Then
            'Algum usuario foi clicado
            objBLL.localizar(primeiro)
            If (objBLL.pOs_codigo <> 0) Then
                carregaCampos()
                If (objBLL.pOs_valor = 0) Then
                    controleFinalizaOrdemServ = 0
                Else
                    controleFinalizaOrdemServ = 1
                End If
            End If
        End If
    End Sub

    Sub limpar()
        tbCodigo.Text = ""
        tbCodVeiculo.Text = ""
        tbConsultar.Text = ""
        tbKilometragem.Text = ""
        tbPlacaVeiculo.Text = ""
        tbProblema.Text = ""
        tbRealProblema.Text = ""
        tbValor.Text = ""
        mtbDataOrdemServico.Text = Date.Now
        mtbDataPrevRet.Text = ""
        mtbDataRet.Text = ""
    End Sub

    Private Sub bIncluir_Click(sender As System.Object, e As System.EventArgs) Handles bIncluir.Click
        limpar()
        controle = "I"
        status(False)
        mtbDataOrdemServico.Text = Date.Now
        tbValor.Enabled = False
        mtbDataPrevRet.Enabled = True
        tbProblema.Enabled = True
        tbKilometragem.Enabled = True
        bPesquisarVeiculo.Enabled = True
        mtbDataRet.Enabled = False
        tbRealProblema.Enabled = False
    End Sub

    Sub status(ByVal sta As Boolean)

        If (tbCodigo.Text = "" Or controle = "A") Then
            bIncluir.Enabled = sta

            bExcluir.Enabled = sta
            If (tbCodigo.Text = "") Then
                bAlterar.Enabled = False
                bVaPara.Enabled = False
                bPesquisar.Enabled = False
                bExcluir.Enabled = False
            Else
                bExcluir.Enabled = sta
                bPesquisar.Enabled = sta
                If (tbValor.Text = 0) Then
                    bAlterar.Enabled = sta
                Else
                    bAlterar.Enabled = Not sta
                End If
                bVaPara.Enabled = sta
                End If
                bCancelar.Enabled = Not sta
                bSalvar.Enabled = Not sta
                bPrimeiro.Enabled = sta
                bProximo.Enabled = sta
                bUltimo.Enabled = sta
                bAnterior.Enabled = sta
                gbConteudo.Enabled = Not sta
        Else
                bIncluir.Enabled = sta

                If (tbCodigo.Text = "") Then
                    bExcluir.Enabled = False
                    bAlterar.Enabled = False
                    bVaPara.Enabled = False
                    bPesquisar.Enabled = False
                Else
                    bExcluir.Enabled = sta
                    bAlterar.Enabled = sta
                    bVaPara.Enabled = sta
                    bPesquisar.Enabled = sta
                End If

                bCancelar.Enabled = Not sta
                bSalvar.Enabled = Not sta

                gbConteudo.Enabled = Not sta
        End If

        If (atual = primeiro And atual = ultimo) Then
            bProximo.Enabled = False
            bUltimo.Enabled = False
            bAnterior.Enabled = False
            bPrimeiro.Enabled = False
        ElseIf (atual = ultimo) Then
            bProximo.Enabled = False
            bUltimo.Enabled = False
            bAnterior.Enabled = True
            bPrimeiro.Enabled = True
        ElseIf (atual = primeiro) Then
            bProximo.Enabled = True
            bUltimo.Enabled = True
            bAnterior.Enabled = False
            bPrimeiro.Enabled = False
        Else
            bProximo.Enabled = True
            bUltimo.Enabled = True
            bAnterior.Enabled = True
            bPrimeiro.Enabled = True

        End If
    End Sub

    Sub carregaPropriedades()

        Try
            If (tbCodigo.Text = "") Then
                objBLL.pOs_codigo = 0
            Else
                objBLL.pOs_codigo = Integer.Parse(tbCodigo.Text)
            End If
            If (mtbDataOrdemServico.Text = "00/00/0000" Or mtbDataOrdemServico.Text = "  /  /" Or Not IsDate(mtbDataOrdemServico.Text) And controle = "I") Then
                objBLL.pOs_data = Nothing
            Else
                objBLL.pOs_data = Date.Parse(mtbDataOrdemServico.Text)
            End If
            If (mtbDataPrevRet.Text = "00/00/0000" Or mtbDataPrevRet.Text = "  /  /" Or Not IsDate(mtbDataPrevRet.Text) And controle = "I") Then
                objBLL.pOs_data_prevista = Nothing
            Else
                objBLL.pOs_data_prevista = Date.Parse(mtbDataPrevRet.Text)
            End If
            If (mtbDataRet.Text = "00/00/0000" Or mtbDataRet.Text = "  /  /" Or Not IsDate(mtbDataRet.Text)) Then
                objBLL.pOs_data_retorno = Nothing
            Else
                objBLL.pOs_data_retorno = Date.Parse(mtbDataRet.Text)
            End If
            If (tbKilometragem.Text <> "") Then
                objBLL.pOs_km = tbKilometragem.Text
            Else
                objBLL.pOs_km = 0
            End If
            objBLL.pOs_problema = tbProblema.Text
            objBLL.pOs_real_problema = tbRealProblema.Text
            If (tbValor.Text = "") Then
                objBLL.pOs_valor = 0
            Else
                objBLL.pOs_valor = Double.Parse(tbValor.Text)
            End If
            If (tbCodVeiculo.Text <> "") Then
                objBLL.pVei_codigo = Integer.Parse(tbCodVeiculo.Text)
            Else
                objBLL.pVei_codigo = 0
            End If


        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Sub carregaCampos()
        Try

            tbCodigo.Text = objBLL.pOs_codigo
            tbCodVeiculo.Text = objBLL.pVei_codigo
            objVei.localizar("vei_codigo", objBLL.pVei_codigo)
            tbPlacaVeiculo.Text = objVei.pPlaca
            tbKilometragem.Text = objBLL.pOs_km
            tbPlacaVeiculo.Text = objVei.pPlaca
            tbProblema.Text = objBLL.pOs_problema
            tbRealProblema.Text = objBLL.pOs_real_problema
            tbValor.Text = objBLL.pOs_valor
            mtbDataOrdemServico.Text = Date.Now
            If ((objBLL.pOs_data_prevista) = "12:00:00 AM") Then
                mtbDataPrevRet.Text = ""
            Else
                mtbDataPrevRet.Text = objBLL.pOs_data_prevista
            End If
            If (((objBLL.pOs_data_retorno) = "12:00:00 AM")) Then
                mtbDataRet.Text = ""
            Else
                mtbDataRet.Text = objBLL.pOs_data_retorno
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Public Sub atualizaGrid()
         Try
            dgDados.DataSource = objBLL.localizarOrdemServico(tbConsultar.Text)
            dgDados.Columns(0).HeaderText = "Código do Serviço"
            dgDados.Columns(1).HeaderText = "Data do Serviço"
            dgDados.Columns(2).HeaderText = "Placa do Veículo"
            dgDados.Columns(3).HeaderText = "Kilometragem"
            dgDados.Columns(0).Width = 160
            dgDados.Columns(1).Width = 160
            dgDados.Columns(2).Width = 160
            dgDados.Columns(3).Width = 132
            dgDados.AllowUserToAddRows = False

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub bSalvar_Click(sender As System.Object, e As System.EventArgs) Handles bSalvar.Click
        Try
            carregaPropriedades()
            If (objBLL.pOs_data_retorno <> Nothing And objBLL.pOs_data_retorno < objBLL.pOs_data And controle = "I") Then
                Throw New Exception("Data prevista para retorno não pode ser inferior a data da ordem de serviço")
            End If
            If (objBLL.pOs_data_prevista <> Nothing And objBLL.pOs_data_prevista < objBLL.pOs_data And controle = "I") Then
                Throw New Exception("Data prevista para retorno não pode ser inferior a data da ordem de serviço")
            End If
            If (controle = "I") Then
                objBLL.inserir()
                MsgBox("Ordem de serviço incluído com sucesso!", MsgBoxStyle.Information, "Sucesso")
                limpar()
                carregaPrimeiroUltimo()
                carregaUltimo()
                status(True)
            Else
                If (controleFinalizaOrdemServ = 0) Then
                    If (objBLL.pOs_data_retorno >= objBLL.pOs_data) Then
                        objBLL.alterar()
                        MsgBox("Alterado com sucesso!", MsgBoxStyle.Information, "Sucesso")
                        status(True)
                    Else
                        Throw New Exception("Data de retorno não pode ser inferior a data de entrada da ordem de serviço")
                    End If
                Else
                    Throw New Exception("Ordem de Serviço já foi finalizada e não pode ser alterada")
                End If
                End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub bClose_Click(sender As System.Object, e As System.EventArgs) Handles bClose.Click
        gbConsulta.Visible = False
        Me.Location = New System.Drawing.Point(Me.Location.X, Me.Location.Y + 127)
        Me.Size = New Size(734, 507)
        controlePesquisar = False
    End Sub

    Private Sub bPesquisar_Click(sender As System.Object, e As System.EventArgs) Handles bPesquisar.Click
        If (controlePesquisar = False) Then
            gbConsulta.Visible = True
            Me.Location = New System.Drawing.Point(Me.Location.X, Me.Location.Y - 127)
            Me.Size = New Size(734, 733)
            controlePesquisar = True
            tbConsultar.Text = ""
            atualizaGrid()
        Else
            bClose_Click(sender, e)
        End If
    End Sub

    Private Sub bAlterar_Click(sender As System.Object, e As System.EventArgs) Handles bAlterar.Click
        Try
        If (tbValor.Text <> 0) Then
            Throw New Exception("Esta ordem de serviço ja foi finalizada e não pode ser alterada")
        End If
        controle = "A"
        bPesquisarVeiculo.Enabled = False
        tbValor.Enabled = True
        status(False)
        mtbDataRet.Enabled = True
        mtbDataPrevRet.Enabled = False
        tbProblema.Enabled = False
        tbRealProblema.Enabled = True
        tbKilometragem.Enabled = False
        If (tbValor.Text = 0) Then
            mtbDataRet.Text = Date.Now
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub bExcluir_Click(sender As System.Object, e As System.EventArgs) Handles bExcluir.Click
        Try
            If (MessageBox.Show("Deseja excluir?", "", MessageBoxButtons.YesNo) = DialogResult.Yes) Then
                carregaPropriedades()
                objBLL.excluir()
                MessageBox.Show("Excluido com sucesso!")
                limpar()
                carregaPrimeiroUltimo()
                carregaUltimo()
                status(True)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub bCancelar_Click(sender As System.Object, e As System.EventArgs) Handles bCancelar.Click
        If (controle = "I") Then
            carregaPrimeiroUltimo()
            carregaUltimo()
        ElseIf (controle = "A") Then
            objBLL.localizar(atual)
            If (objBLL.pOs_codigo <> 0) Then
                carregaCampos()
                atual = objBLL.pOs_codigo
            End If
        End If
        controle = ""
        status(True)
    End Sub

    Private Sub bVaPara_Click(sender As System.Object, e As System.EventArgs) Handles bVaPara.Click
        Try
        Dim frm As New frm_VaPara("ordem_servico")
        frm.ShowDialog()
        If (frm.codigo <> 0) Then
            'algum usuario foi clicado
            objBLL.localizar(frm.codigo)
            If (objBLL.pOs_codigo <> 0) Then
                carregaCampos()
                atual = objBLL.pOs_codigo
                If (objBLL.pOs_valor = 0) Then
                    controleFinalizaOrdemServ = 0
                    bAlterar.Enabled = True
                Else
                    controleFinalizaOrdemServ = 1
                    bAlterar.Enabled = False

                End If
                End If
            Else
                Throw New Exception("Registro Inexistente!")
                bVaPara_Click(sender, e)

        End If
            status(True)
            frm = Nothing
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub bPrimeiro_Click(sender As System.Object, e As System.EventArgs) Handles bPrimeiro.Click
        carregaPrimeiro()
        atual = primeiro
        status(True)
    End Sub

    Private Sub bAnterior_Click(sender As System.Object, e As System.EventArgs) Handles bAnterior.Click
        Dim codigo = objBLL.localizarProxAnteriro("anterior", atual)
        objBLL.localizar(codigo)
        If (objBLL.pOs_codigo <> 0) Then
            carregaCampos()
            atual = objBLL.pOs_codigo
        End If
        status(True)
    End Sub

    Private Sub bProximo_Click(sender As System.Object, e As System.EventArgs) Handles bProximo.Click
        Dim codigo = objBLL.localizarProxAnteriro("proximo", atual)
        objBLL.localizar(codigo)
        If (objBLL.pOs_codigo <> 0) Then
            carregaCampos()
            atual = objBLL.pOs_codigo
        End If
        status(True)
    End Sub

    Private Sub bUltimo_Click(sender As System.Object, e As System.EventArgs) Handles bUltimo.Click
        carregaUltimo()
        atual = ultimo
        status(True)
    End Sub

    Private Sub bAjuda_Click(sender As System.Object, e As System.EventArgs) Handles bAjuda.Click
        Dim Ajuda As String
        Ajuda = Application.StartupPath
        Ajuda = Ajuda.Replace("\bin\Debug", "\Arquivo de Ajuda\index.html#MovimentacaoOrdemServicos")
        Dim Ie As Object
        Ie = CreateObject("InternetExplorer.Application")
        Ie.Visible = True
        Ie.Navigate(Ajuda)
    End Sub

    Private Sub bSair_Click(sender As System.Object, e As System.EventArgs) Handles bSair.Click
        Me.Close()
    End Sub

    Private Sub bFiltrar_Click(sender As System.Object, e As System.EventArgs) Handles bFiltrar.Click
        atualizaGrid()
    End Sub

    Private Sub bPesquisarVeiculo_Click(sender As System.Object, e As System.EventArgs) Handles bPesquisarVeiculo.Click
        Try

            Dim frm As New frm_consultas
            frm.tipo = "ordem_servico"
            frm.ShowDialog()
            If (frm.codigo <> 0) Then
                objveiculos.localizar("vei_codigo", frm.codigo)
                tbCodVeiculo.Text = objVei.pcodVeiculo
                tbPlacaVeiculo.Text = objVei.pPlaca
            End If
            frm = Nothing
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub frm_movimentacao_ordemServico_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Try
            carregaPrimeiroUltimo()
            carregaUltimo()
            gbConteudo.Enabled = False
            bClose_Click(sender, e)
            If (objBLL.pOs_valor = 0) Then
                controleFinalizaOrdemServ = 0
                bAlterar.Enabled = True
            Else
                controleFinalizaOrdemServ = 1
                bAlterar.Enabled = False
            End If
            bProximo.Enabled = False
            bUltimo.Enabled = False
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub


    Private Sub tbKilometragem_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles tbKilometragem.KeyPress
        If (Asc(e.KeyChar) = 3 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 22 Or Asc(e.KeyChar) = 24) Then
            Exit Sub
        End If
        If Not Char.IsNumber(e.KeyChar) Then
            e.Handled = True
        End If
    End Sub

    Private Sub tbValor_KeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs) Handles tbValor.KeyPress
        Try
            If Asc(e.KeyChar) = 3 Or Asc(e.KeyChar) = 8 Or Asc(e.KeyChar) = 22 Or Asc(e.KeyChar) = 24 Or Asc(e.KeyChar) = 44 Then
                Exit Sub
            End If

            If Not Char.IsNumber(e.KeyChar) Then
                e.Handled = True
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

    Private Sub tbValor_Leave(sender As System.Object, e As System.EventArgs) Handles tbValor.Leave
        If (tbValor.Text <> "") Then
            tbValor.Text = FormatNumber(tbValor.Text, 2)
        End If
    End Sub

    Private Sub dgDados_CellDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgDados.CellDoubleClick
        Try
            If (e.RowIndex >= 0) Then
                objBLL.localizar(dgDados.Rows(e.RowIndex).Cells("os_codigo").Value)
                objVei.localizar(objBLL.pOs_codigo)
                If (objBLL.pOs_valor = 0) Then
                    controleFinalizaOrdemServ = 0
                    bAlterar.Enabled = True
                    mtbDataPrevRet.Enabled = True
                    mtbDataRet.Enabled = True
                    tbKilometragem.Enabled = True
                Else
                    controleFinalizaOrdemServ = 1
                    bAlterar.Enabled = False
                    mtbDataPrevRet.Enabled = False
                    mtbDataRet.Enabled = False
                    tbKilometragem.Enabled = False
                End If
                
                carregaCampos()
                bClose_Click(sender, e)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Erro")
        End Try
    End Sub

End Class